package cn.wzut.edut.service;

import cn.wzut.edut.dao.inf.Menu;
import cn.wzut.edut.dao.inf.Role;
import cn.wzut.edut.dao.pojo.table.SysMenu;
import cn.wzut.edut.dao.pojo.table.SysRole;
import cn.wzut.edut.dao.pojo.table.SysRoleMenuRel;
import cn.wzut.edut.exception.ServiceException;
import cn.wzut.edut.jwt.JWTUtils;
import cn.wzut.edut.pojo.MenuRoleRelModInfo;
import com.auth0.jwt.interfaces.DecodedJWT;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.*;

@Service
public class MenuService {

    @Autowired
    Menu menu;

    @Autowired
    Role role;


    /**
     * 移除菜单赋予的角色
     * @param menuId
     * @param roleIds
     * @return
     */
    public boolean delMenuRole(String menuId, String[] roleIds) {
        List<String> role_id = Arrays.asList(roleIds);
        List<String> menu_id = Arrays.asList(menuId);
        return role.delSysRoleMenuList(null, role_id, menu_id);
    }

    /**
     * 添加菜单赋予的角色
     * @param menuId
     * @param roleIds
     * @return
     */
    public int addMenuRole(String menuId, String[] roleIds) {
        List<SysRoleMenuRel> sysRoleMenuRelList = new ArrayList<>();
        for(String roleId : roleIds){
            sysRoleMenuRelList.add(new SysRoleMenuRel(null, roleId, menuId));
        }
        return role.insertSysRoleMenuRelList(sysRoleMenuRelList);
    }

    /**
     * 获取菜单列表
     * @return
     */
    public Map<String, Object> getMenuList() {
        //返回字典
        Map<String, Object> data = new HashMap<>();
        data.put("sysMenuList", menu.selectSysMenu(null, null, null, null, null));
        data.put("sysMenuCount", menu.countSysMenu(null, null, null, null, null));
        return data;
    }








//    /**
//     * 获取菜单分页列表
//     *
//     * @param token
//     * @return
//     */
//    public List<SysMenu> getMenuListByPage(String token, long current, long size) {
//        // 解析token
//        DecodedJWT decode = JWTUtils.decode(token);
//        // 判断角色是否拥有该权限
//        if (true) {
//            //返回列表
//            return menu.selectAllSysUserPage(current, size);
//        }
//        throw new ServiceException(-1, "获取菜单列表失败（无权调用）");
//    }
//
//    /**
//     * 查询菜单
//     *
//     * @param token
//     * @return
//     */
//    public List<SysMenu> queryMenu(String token, long current, long size, String name) {
//        // 解析token
//        DecodedJWT decode = JWTUtils.decode(token);
//        // 判断角色是否拥有该权限
//        if (true) {
//            //返回列表
//            return menu.selectSysMenuInNamePage(current, size, name);
//        }
//        throw new ServiceException(-1, "查询菜单失败（无权调用）");
//    }
//
//    /**
//     * 获取菜单赋予的角色
//     *
//     * @param token
//     * @return
//     */
//    public List<SysRole> getMenuByRole(String token, String menu_id, long current, long size) {
//        // 解析token
//        DecodedJWT decode = JWTUtils.decode(token);
//        // 判断角色是否拥有该权限
//        if (true) {
//            //返回列表
//            return menu.selectRoleInMenuPage(menu_id, current, size);
//        }
//        throw new ServiceException(-1, "获取菜单赋予的角色失败（无权调用）");
//    }
//
//    /**
//     * 更改菜单赋予角色
//     *
//     * @param token
//     * @return
//     */
//    public Boolean modMenuByRole(String token, MenuRoleRelModInfo menuRoleRelModInfo) {
//        // 解析token
//        DecodedJWT decode = JWTUtils.decode(token);
//        // 判断角色是否拥有该权限
//        if (true) {
//            String menu_id = menuRoleRelModInfo.getMenuID();
//            for (String role_id : menuRoleRelModInfo.getAdd_roleid()) {
//                role.insertSysRoleMenuRel(role_id, menu_id);
//            }
//            for (String role_id : menuRoleRelModInfo.getDel_roleid()) {
//                role.delSysRoleMenu(role_id, menu_id);
//            }
//            return true;
//        }
//        throw new ServiceException(-1, "更改菜单赋予角色失败（无权调用）");
//    }

}
